
package com.svh.Dao.Impl;

import com.svh.Dao.UsuarioDao;
import com.svh.Entidad.Empleado;
import com.svh.Entidad.Local;
import com.svh.Entidad.Usuario;
import com.svh.Utils.DataBaseException;
import com.svh.Utils.IConexion;
import com.svh.Utils.Utilitario;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
public class UsuarioDaoImpl extends HibernateImpl<Usuario> implements UsuarioDao{

    private static final Logger log = Utilitario.LOG;
    
    public UsuarioDaoImpl(IConexion conexion) {
        super(conexion);
    }

    @Override
    public boolean existeUsuario(Usuario usuario) {
        return existeUsuario(usuario, null);
    }

    @Override
    public boolean existeUsuario(Usuario usuario, Local local) {
        boolean resultado = false;
        Session session = conexion.getSession();
        Criteria criteria = session.createCriteria(Usuario.class,"user")
                .add(Restrictions.eq("user.nick",usuario.getNick()))
                .add(Restrictions.eq("user.clave", usuario.getClave()));
        if(local != null){
            criteria.createAlias("user.local","local").add(Restrictions.eq("local.id",usuario.getLocal().getId()));
        }
        Usuario user = (Usuario) criteria.uniqueResult();
        if(user != null && user.getClave().equals(usuario.getClave())){
            resultado = true;
        }
        return resultado;
    }

    @Override
    public Usuario getUsuarioPorNick(String nick) {
        Usuario auxUsuario = null;
        Session session = conexion.getSession();
        try{
            Criteria criteria = session.createCriteria(Usuario.class,"user").add(Restrictions.eq("user.nick", nick));
            auxUsuario = (Usuario) criteria.uniqueResult();
        }catch(HibernateException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
        return auxUsuario;
    }

    @Override
    public boolean estaAsignadaEmpleado(Usuario usuario) {
        Session session = conexion.getSession();
        try{
            Criteria criteriaEmpleado = session.createCriteria(Empleado.class,"empleado");
            criteriaEmpleado.createAlias("empleado.usuario","user");
            criteriaEmpleado.add(Restrictions.eq("user.nick",usuario.getNick()));
            if(criteriaEmpleado.uniqueResult() != null)
            {
                return true;
            }
        }catch(HibernateException e){
            log.error("Error de Hibernate",e);
             throw new DataBaseException("Ha existido un error en ejecutar un query con el usuario");
        }
        
        
        return false;
    }

}
